package com.study.algorithm.linkedList;

public class HasCycle {
    public boolean hasCycle(ListNode head) {
        // 如果链表为空或只有一个节点，直接返回false
        if (head == null || head.next == null) {
            return false;
        }
        
        // 初始化快慢指针
        ListNode slow = head;
        ListNode fast = head.next;
        
        // 循环直到快慢指针相遇或快指针到达链表末尾
        while (slow != fast) {
            // 如果fast或fast.next为null，说明链表无环
            if (fast == null || fast.next == null) {
                return false;
            }
            // 慢指针移动一步
            slow = slow.next;
            // 快指针移动两步
            fast = fast.next.next;
        }
        
        // 如果slow == fast，说明链表有环
        return true;
    }
}